import axios from 'axios'
import qs from 'qs'
import state from '../store/state.js'
// import Vue from 'vue'
import { AlertModule } from 'vux'

// Vue.use(AlertPlugin)

axios.defaults.timeout = 5000
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
axios.defaults.headers.get['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
// axios.defaults.headers.post['Authorization'] = sessionStorage.getItem('api_token')
// axios.defaults.headers.get['Authorization'] = sessionStorage.getItem('api_token')
// axios.defaults.headers.post['Access-Control-Allow-Origin'] = '*'
axios.defaults.baseURL = state.url

/** 拦截器 */
// 请求拦截器 POST传参序列化
axios.interceptors.request.use((config) => {
  if (config.method === 'post') {
    config.data = qs.stringify(config.data)
  }
  // console.warn('config.url=' + config.url)
  if (config.method === 'post' && config.url === '/sys/login/login') {

  } else {
    config.headers.Authorization = sessionStorage.getItem('api_token')
  }

  return config
}, (error) => {
  // 请求错误时做些事
  return Promise.reject(error)
})

// 响应拦截器 返回状态判断
axios.interceptors.response.use((res) => {
  // 输出URL @TODO 隐藏
  console.log(res.config.url)
  console.log(res.data)
  // console.log(res)

  // // 判断localStorage中是否存在api_token
  // if (sessionStorage.getItem('api_token')) {
  //   //  存在将api_token写入 request header
  //   res.headers.apiToken = `${localStorage.getItem('api_token')}`
  // }

  // if (res.data) {
  //   console.info('被拒绝')
  //   return Promise.reject(res)
  // }

  if (!Object.is(res.data.code, 0)) {
    AlertModule.show({
      title: '请求结果',
      content: res.data.desc,
      onShow () {
      },
      onHide () {
      }
    })
    console.debug('checkCode => res.data = ' + res.data)
    return Promise.reject(res)
  }
  return res
}, (error) => {
  console.error('出错了，进入了error')
  // 404等问题可以在这里处理
  return Promise.reject(error)
})

// // 公共方法
// export function fetch (url, params) {
//   return new Promise((resolve, reject) => {
//     axios.post(url, params)
//       .then(response => {
//         resolve(response.data)
//       }, err => {
//         reject(err)
//       })
//       .catch((error) => {
//         reject(error)
//       })
//   })
// }

function checkStatus (response) {
  // 如果http状态码正常，则直接返回数据
  if (response && (response.status === 200 || response.status === 304 ||
    response.status === 400)) {
    return response
  }
  // 异常状态下，把错误信息返回去
  return {
    status: -404,
    msg: '网络异常'
  }
}

/** 校验返回值 */
function checkCode (res) {
  if (!Object.is(res.data.code, 0)) {
    AlertModule.show({
      title: '请求结果',
      content: res.data.desc,
      onShow () {
      },
      onHide () {
      }
    })
    console.debug('checkCode => res.data = ' + res.data)
    return Promise.reject(res)
  }
  return res
}

export default {
  // getAddressJson () {
  //   return fetch('/demo/get', { addressId: 1 })
  // }
  post (url, param) {  //  post
    return axios({
      method: 'post',
      url,
      // data: qs.stringify(param),
      data: param
      // headers: {
      //   'X-Requested-With': 'XMLHttpRequest',
      //   'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
      // }
    }).then(
      // (response) => {
      //   return checkStatus(response)
      // }
    ).then(
      // (res) => {
      //   return checkCode(res)
      // }
    )
  },
  get (url, params) {  // get
    return axios({
      method: 'get',
      url,
      params, // get 请求时带的参数
      headers: {
        'X-Requested-With': 'XMLHttpRequest'
      }
    }).then(
      (response) => {
        return checkStatus(response)
      }
    ).then(
      (res) => {
        return checkCode(res)
      }
    )
  }
}
